草庐IT

C++ 指向 vector 的指针

全部标签

c++ - 如何获取析构函数的成员函数指针?

假设我有structX{~X(){}};C++03中X::~X()的成员函数指针是什么类型,如何获取?我不想实际调用它,只是在SFINAE中使用它来确定是否存在给定类型的析构函数。 最佳答案 您无法获取析构函数或构造函数的函数指针。尽管如此,一个类型总是存在析构函数,并且您无法检测SFINAE是否不考虑它的带有as访问说明符的private。关于调用什么是标量类型的析构函数,标准说[class.dtor]/16:[Note:thenotationforexplicitcallofadestructorcanbeusedforanys

c++ - 控制 std::vector 重新分配

通过阅读std::vector引用,我明白了在达到最大容量时调用insert将导致std::vector重新分配(导致迭代器失效),因为新内存分配给它具有更大的容量。目标是保证连续数据。只要我坚持低于最大容量,insert就不会导致这种情况(并且迭代器将完好无损)。我的问题如下:当insert自动调用reserve时,有什么办法可以控制必须保留多少新内存?假设我有一个初始容量为100的vector,当达到最大容量时,我想额外分配20个字节。这有可能吗? 最佳答案 你总是可以自己跟踪它并在它分配之前调用reserve,例如static

c++ - 使用带有自定义释放器的 std::unique_ptr 来包装原始指针

我正在尝试使用libsvm对于某个复杂的应用程序,并且由于libsvm主要是一个C库,因此在加载某些数据后,必须使用自定义API函数来释放内存。这就是我的意思:structsvm_model*model;model=svm_load_model("pathtomodelfile");//dosomeprocessingsvm_free_and_destroy_model(&this->model);这些是我使用的libsvmAPI函数的定义:structsvm_model*svm_load_model(constchar*model_file_name);voidsvm_free_an

c++ - 将 vector<shared_ptr<Derived>> 传递给需要 vector<shared_ptr<Base>> 的函数

我使用的代码结构有问题,如下(简化):classSPoint{public:SPoint(doublex,doubley,doublez):_x(x),_y(y),_z(z){}protected:double_x,_y,_z;}classPoint3D:publicSPoint{public:Point3D(doublex,doubley,doublez):SPoint(x,y,z){//defaultvaluesforUandV}protected:doubleU,V;}这些点用于创建折线:classSPolyline{public:SPolyline(constvector>&p

c++ - 将 weak_ptr 与原始指针进行比较不起作用,正在寻找替代方案

我有一个SpriteManager类,它为我加载和缓存Sprite,并从缓存中删除未使用的Sprite。无论如何,这就是我的想法,我有点卡住了。我有一个map>我在其中存储Sprite,并使用weak_ptr生成shared_ptr的。现在我正在尝试使用一个删除器,它也从map中删除位图,它看起来像这样(显然不起作用):[&bitmaps](ALLEGRO_BITMAP*bmp){for(autoit=bitmaps.begin();it!=bitmaps.end();++it){if((*it).second==bmp){bitmaps.erase(it);al_destroy_bi

c++ - 排序和连接百万或十亿 STL vector 的最快方法

将数百万或数十亿个STLvector排序并串联成单个STLvector的最佳方法是什么。目前,我的做法是迭代vector并执行每个操作。这是伪代码typedefunsignedlonglongintULLInt;ULLIntN=1000000;vector>vecVec(N,vector());vectorconcatVec;//...//...fillvectorsinsidevecVechere//..wealsogetherethetotalnumberofvaluesinsertedinallvectors(count)//...//reservethespaceconcatV

c++ - vector 无效分配大小

当我尝试创建并调整一个vector以容纳最大数量的项目时(vector::max_size()),我在运行时遇到调试错误:"Invalidallocationsize:429467292"我想知道为什么你不能调整它的大小,如果max_size()应该返回vector中项目的最大数量......vectorvc;vc.resize(vc.max_size());我还尝试在VS2010中启用LARGADRESSAWARE:On,但这没有帮助。想知道这是否是正确的thoguth...有人知道吗? 最佳答案 max_size()是vecto

C++ 在 boost::mpl::vector 中为每个类加好友

如何在boost::mpl::vector中的每个类(class)都有一个类(class)friend?即,扩展为:templateclassA{friendclassmpl_vector[0];friendclassmpl_vector[1];...friendclassmpl_vector[n];}; 最佳答案 按照Andres的建议,使用boost预处理器进行处理。我试过了,不是很好,编译效率会很低。它也仅限于达到BOOST_MPL_LIMIT_VECTOR_SIZE。如果他的方法有效,那么它可能会更干净一些。A类.h:#if

c++ - boost 路径指向的目录中文件的路径

我有一个指向某个目录的boost路径。如何构建指向该目录中文件的路径?如果这是显而易见的事情,请发表评论。我是C++的新手,在Java中就这么简单:Filefile=newFile(theDirectory,"filename.txt"); 最佳答案 使用append例如path/=filename; 关于c++-boost路径指向的目录中文件的路径,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

c++ - 如何在 C++ 中打乱指针列表?

如何在C++中打乱STL指针列表?我在Player类上有指针的STLvector,我像std::random_shuffle(players.begin(),players.end());是否已经有不需要随机访问的洗牌列表算法,或者我需要将列表转换为vector=>洗牌=>返回列表?有没有更优雅的解决方案? 最佳答案 随机洗牌算法将特定元素与随机选择的元素交换。重复遍历列表获取元素是非常低效的(即O(n^2)操作)。这就是为什么最好(更快)将列表复制到数组一次,进行随机洗牌并可能恢复列表的原因。那将是3*n遍历,仍然是O(n)。